package com.kexio.security.domain.enums;

/**
 * 角色类型枚举
 * 
 * @author Kexio Team
 * @since 1.0.0
 */
public enum RoleType {
    /**
     * 系统角色
     */
    SYSTEM(0, "系统角色"),
    
    /**
     * 业务角色
     */
    BUSINESS(1, "业务角色"),
    
    /**
     * 临时角色
     */
    TEMPORARY(2, "临时角色");

    private final Integer code;
    private final String description;

    RoleType(Integer code, String description) {
        this.code = code;
        this.description = description;
    }

    public Integer getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 根据编码获取类型
     * @param code 类型编码
     * @return 类型枚举
     */
    public static RoleType fromCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (RoleType type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("无效的角色类型编码: " + code);
    }

    /**
     * 检查是否为系统角色
     * @return 是否系统角色
     */
    public boolean isSystem() {
        return this == SYSTEM;
    }

    /**
     * 检查是否为业务角色
     * @return 是否业务角色
     */
    public boolean isBusiness() {
        return this == BUSINESS;
    }

    /**
     * 检查是否为临时角色
     * @return 是否临时角色
     */
    public boolean isTemporary() {
        return this == TEMPORARY;
    }
}